package com.ruoyi.merchant.mapper;

import com.ruoyi.merchant.domain.Announcement;
import com.ruoyi.merchant.domain.dto.AnnouncementQueryDTO;
import com.ruoyi.merchant.domain.vo.AnnouncementListVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 商家端公告Mapper接口
 */
public interface AnnouncementMapper {

    /**
     * 新增公告
     *
     * @param announcement 公告信息
     * @return 影响行数
     */
    int insertAnnouncement(Announcement announcement);

    /**
     * 查询商家公告列表
     *
     * @param query 查询条件
     * @return 公告列表
     */
    List<AnnouncementListVO> selectMerchantAnnouncementList(AnnouncementQueryDTO query);

    /**
     * 根据ID查询公告详情
     *
     * @param announcementId 公告ID
     * @param merchantId 商家ID
     * @return 公告详情
     */
    Announcement selectAnnouncementById(@Param("announcementId") Long announcementId,
                                        @Param("merchantId") Long merchantId);

    /**
     * 软删除公告
     *
     * @param announcementId 公告ID
     * @param merchantId 商家ID
     * @return 影响行数
     */
    int deleteAnnouncementById(@Param("announcementId") Long announcementId,
                               @Param("merchantId") Long merchantId);

    /**
     * 更新公告
     *
     * @param announcement 公告信息
     * @return 影响行数
     */
    int updateAnnouncement(Announcement announcement);

    /**
     * 更新公告状态
     *
     * @param announcementId 公告ID
     * @param merchantId 商家ID
     * @param status 状态
     * @param publishTime 发布时间（可选）
     * @return 影响行数
     */
    int updateAnnouncementStatus(@Param("announcementId") Long announcementId,
                                 @Param("merchantId") Long merchantId,
                                 @Param("status") Integer status,
                                 @Param("publishTime") Date publishTime);

}
